package mx.frantor.reportes;

import java.io.File;
import java.io.IOException;
import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.collections.map.HashedMap;

import mx.frantor.catalogos.entitys.AlamcenEntity;
import mx.frantor.catalogos.entitys.OrdenDeProduccionEntity;
import mx.frantor.catalogos.entitys.ProductosExistenciasEntity;
//import mx.frantor.catalogos.entitys.ProductosExistenciasEntity;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

/**
 * Servlet implementation class EtiquetarProductos
 */
@WebServlet(description = "EtiquetarProd")
public class EtiquetarProd extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public EtiquetarProd() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	@SuppressWarnings("unchecked")
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		byte[] bytes = null; // Para arreglo de bytes donde almacenar reporte
		@SuppressWarnings("rawtypes")
		Map hm = new HashedMap();
		//<-- ## Indicamos ruta desde lado del server donde tomar archivo binario que generara el reporte Jasper -->
		File fileReporte = new File(getServletConfig().getServletContext().getRealPath("/WEB-INF/ZEtiquetas/ZEtiquetaProd.jasper"));
		
		// Vars para guardar valores enviados como parametro
		String[] clave = request.getParameterValues("CLAVE");
		String[] mod = request.getParameterValues("MODELO");
		//String[] nombre = request.getParameterValues("NOMBRE");
		String[] fecha = request.getParameterValues("FECHA");
		String[] hojaviajera = request.getParameterValues("HOJAVIAJERA");
		String[] cant = request.getParameterValues("CONSECUTIVOINI");
		String[] cantfin = request.getParameterValues("CONSECUTIVOFIN");
		String[] canttot = request.getParameterValues("TOTAL");
		String[] idorden =  request.getParameterValues("IDORDEN");
		String[] barra =  request.getParameterValues("BARRA");
		String[] tipo =  request.getParameterValues("TIPO");
		//String[] clave = request.getParameterValues("CLAVE");
		//System.out.println("Array Values: " + clave.length);
		
		List<OrdenDeProduccionEntity> lstProductos = new ArrayList<OrdenDeProduccionEntity>();
		{
		OrdenDeProduccionEntity productos= new OrdenDeProduccionEntity();
		productos.setNombreProducto(mod[0]);
		  productos.setSFecha(fecha[0]);
		  productos.setHojaViajera(hojaviajera[0]);
		  productos.setConsecutivo(cantfin[0]);
		  productos.setCantidad(Float.valueOf(canttot[0]));
		  productos.setIdOrdenProd(Long.valueOf(idorden[0]));
		  productos.setTipo(tipo[0]);
		  productos.setBarra(barra[0]);
		  productos.setClaveProd(clave[0]);
		  
			 lstProductos.add(productos);
			 JRDataSource ds = new JRBeanCollectionDataSource(lstProductos); //Generamos la fuente de informacion para el Reporte
			 try {
					bytes = JasperRunManager.runReportToPdf(fileReporte.getPath(), hm, ds);
				} catch (JRException e) {
					System.out.println("Error al generar Impresion de etiquetas: " + e.getMessage());
				} 
		    if(bytes != null && bytes.length > 0){
		        response.setContentType("application/pdf"); 
		        response.setContentLength(bytes.length);
		        ServletOutputStream servletOutputStream = response.getOutputStream();
		        servletOutputStream.write(bytes, 0, bytes.length);
		        servletOutputStream.flush();
		        servletOutputStream.close();
		    }	
	}
}
}